#include <iostream>
using namespace std;

// struct Test
// {
//     Test() {}
// };
// union Data
// {
//     Data() { new (&t) Test; }
//     ~Data()
//     {
//         t->~Test();
//         // ::operator delete(t);
//     }
//     int i;
//     float f;
//     char c;
//     Test *t;
// };

// union test
// {
//     int a;
//     double b;
//     char c;
//     const static int d = 10;
// };
// int main()
// {
//     // 联合体内存在非POD类型编译器就会把联合体的构造函数删除，这个时候我们就需要自己
//     // 定义构造函数和析构函数
//     Data d;
//     test t1;
//     union
//     {
//         int a;
//         double b;
//         char c;

//     } t2;
//     std::cout << "sizeof(t1): " << sizeof(t1) << std::endl;
//     std::cout << "sizeof(匿名联合体): " << sizeof(t2) << std::endl;
//     return 0;
// }

#include <iostream>

union NonAnonymousUnion
{
    int intValue;
    float floatValue;
};

union
{
    int intValue;
    float floatValue;
} AnonymousUnion;

int main()
{
    // 检查大小
    std::cout << "Size of Non-anonymous union: " << sizeof(NonAnonymousUnion) << " bytes" << std::endl;
    std::cout << "Size of Anonymous union: " << sizeof(AnonymousUnion) << " bytes" << std::endl;

    // 比较大小
    if (sizeof(NonAnonymousUnion) == sizeof(AnonymousUnion))
    {
        std::cout << "The sizes of the non-anonymous and anonymous unions are equal." << std::endl;
    }
    else
    {
        std::cout << "The sizes of the non-anonymous and anonymous unions are not equal." << std::endl;
    }

    return 0;
}
